package algorithm;

/**
 * 给定一个数组，将数组中的元素向右移动 k 个位置，其中 k 是非负数
 * 要求使用空间复杂度为 O(1) 的 原地 算法
 * @author rongkai
 * @description:
 * @date 2021/3/5
 */
public class Solution4 {
    public static void main(String[] args) {
        int[] array = {1,2,3,4,5,6,7,8};
        int k = 3;
        swap(array, k);
        for (int i : array) {
            System.out.println(i);
        }
    }

    /**
     * 解题思路，反转多次
     * @param array
     * @param k
     * @return
     */
    public static void swap(int[] array,int k){

        for (int i = 0; i < (array.length+1)/2; i++) {
            int temp = array[i];
            array[i] = array[array.length-i-1];
            array[array.length-i-1] = temp;
        }
        for (int i = 0; i < (k+1)/2; i++) {
            int temp = array[i];
            array[i] = array[k-i-1];
            array[k-i-1] = temp;
        }
        for (int i = k; i < (array.length+k+1)/2; i++) {
            int temp = array[i];
            array[i] = array[array.length+k-i-1];
            array[array.length+k-i-1] = temp;
        }
    }


}
